package cr.co.tse.padronelectoral.win;

import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.KeyStroke;

/*******************************************************************************
 *
 * Contiene metodos para hacer mas facil la tarea de inicializar dialogos.
 * entre otras funcionalidades.
 * @author jsanca
 *
 */
public class ComponentInitUtil {

    /**
     * Coloca el dialogo en una posicion relativa con base en el padre.
     * @param parent
     * @param dialog
     */
    public static void setRelativePosition(JFrame parent, JDialog dialog) {

        if (parent != null) {
            dialog.setLocation(parent.getLocation().x + parent.getSize().width / 2 - dialog.getSize().width / 2,
                    parent.getLocation().y + parent.getSize().height / 2 - dialog.getSize().height / 2);
        }

    } // setRelativePosition.

    /**
     * Coloca el dialogo en una posicion relativa con base en el padre.
     * @param parent
     * @param dialog
     */
    public static void setRelativePosition(Frame parent, JDialog dialog) {

        if (parent != null) {
            dialog.setLocation(parent.getLocation().x + parent.getSize().width / 2 - dialog.getSize().width / 2,
                    parent.getLocation().y + parent.getSize().height / 2 - dialog.getSize().height / 2);
        }

    } // setRelativePosition.

    /**
     * Agrega al dialog una accion que se debe ejecutar el teclear la tecla "keyCode".
     * @param dialog
     * @param action
     */
    public static void addKeyBoardAction(JDialog dialog, IKeyBoardAction action, int keyCode) {

        /** Esto es para capturar la tecla escape y hacer invisible la pantalla. */
        dialog.getRootPane().registerKeyboardAction(
                new MyAbstractAction(action),
                KeyStroke.getKeyStroke(keyCode, 0),
                JComponent.WHEN_IN_FOCUSED_WINDOW);
    } // addKeyBoardAction.

    /**
     * Agrega al dialog una accion que se debe ejecutar el teclear la tecla "keyCode".
     * @param dialog
     * @param action
     */
    public static void addKeyBoardAction(JFrame dialog, IKeyBoardAction action, int keyCode) {

        /** Esto es para capturar la tecla escape y hacer invisible la pantalla. */
        dialog.getRootPane().registerKeyboardAction(
                new MyAbstractAction(action),
                KeyStroke.getKeyStroke(keyCode, 0),
                JComponent.WHEN_IN_FOCUSED_WINDOW);
    } // addKeyBoardAction.
    /**
     * Asigna el icono de la aplicacion.
     * @param frame
     * @param uri
     */
    public static void setImageIcon(JFrame frame, String uri) {


        frame.setIconImage(new ImageIcon(ComponentInitUtil.class.getClassLoader().getResource(uri)).getImage());
    } // setImageIcon.

    /**
     * Asigna el icono de la aplicacion.
     * @param frame
     */
    public static void setImageIcon(JFrame frame) {


        setImageIcon(frame, "icon.png");
    } // setImageIcon.

    /**
     * Asigna el icono de la aplicacion.
     * @param frame
     * @param uri
     */
    public static void setImageIcon(JInternalFrame frame, String uri) {


        frame.setFrameIcon(new ImageIcon(ComponentInitUtil.class.getClassLoader().getResource(uri)));
    } // setImageIcon.

    /**
     * Asigna el icono de la aplicacion.
     * @param frame
     * @param uri
     */
    public static void setImageIcon(JInternalFrame frame) {


        setImageIcon(frame, "icon.png");
    } // setImageIcon.

    

    public static void centerWindow(Frame frame) {

        Toolkit tk = Toolkit.getDefaultToolkit();
        Dimension screenSize = tk.getScreenSize();
        int screenHeight = screenSize.height - frame.getHeight();
        int screenWidth = screenSize.width - frame.getWidth();
        
        frame.setLocation(screenWidth / 2, screenHeight / 2);
    }
} // E:O:F:DialogInitUtil.
